Date		:	29 mars 1990
		Programme	:	DRAGON'S LAIR
		Outils		:	SOURCER, PERISCOPE SOFT, EXEHEAD.
		Protection	:	Mot de passe
		Temps pass�	:       1 heure environ
		Fichier		:	GAME.EXE
		Soci�t�		:	READY SOFT
		Divers		:
		Origine		:	SOLO-INDONESIE
		Num�ro		:	012


	Dragon's lair comporte un fichier GAME.EXE qui fait 15k.
	Pourtant impossible � charger avec TD ni CV. Pas assez de place 
	m�moire!.
	Avec SOURCER on s'apercoit que le HEADER du fichier � �t� trafiqu�.
	afin de r�server plus de m�moire qu'il n'en faut.
	Avec EXEHEAD.EXE de MICROSOFT on confirme le fait d'une facon
	�crasante, il suffit d'examiner la derni�re ligne:
	

	Magic number:             5a4d		;propre aux *.EXE
	Bytes on last page:       0125
	Pages in file:            001e
	Relocations:              002c
	Paragraphs in header:     0020
	Extra paragraphs needed:  76fa
	Extra paragraphs wanted:  ffff
	Initial stack location:   798c:1000
	Word checksum:            0000
	Entry point:              0000:0100	;CS:IP
	Relocation table address: 0022
	Memory needed:            491K

	Avec PERISCOPE on peut sauter � l'endroit du code, mais on ne peut
	pas TRACER le programme d�s la premi�re instruction m�me avec
	l'option RUN.COM de PERISCOPE.
	Avec le listing que produit SOURCER on s'apercoit en fait que le
	programme principal consiste essentiellement en une suite de CALL.

	Un "bon" programmeur pas trop vicieux construit son
	programme d'une facon structur�e et a ( en principe ) inclus la
	recherche de code dans un sous-programme et de pr�f�rence dans le
	premier CALL. L'id�e vient donc tout naturellement de commencer �
	"travailler" ce premier CALL, mais voil� impossible de d�marrer ce
	programme � sa premi�re instruction....

	Il existe pourtant une solution avec ce bon vieux PERISCOPE;
	- lancer PERISCOPE normalement,
	- lancer RUN sans parametres,
	- charger le programme GAME.EXE comme un fichier sans l'executer en 
	tapant N GAME.EXE puis LF,
	- lire le segment de donn�e et rajouter 10h, ceci permet pour un
	  fichier EXE de pointer directement sur le premier octet du PSP du
	  fichier.
	  Une v�rification simple est de s'assurer que l'on y trouve bien
	  5A4D signature propre � tout les fichiers EXE. 
	- DW DS:00	----> 5A4D
	
	- dumper la position 08h ( taille du HEADER du programme )
	- DW DS:08      ----> XXXX

	- dumper la position 16h ( adresse du d�but du segment CODE )
	- DW DS:16      ----> YYYY

	- dumper la position 14h ( IP )
	- DW DS:14      ----> ZZZZ

	- chercher la premi�re instruction en faisant E DS+XXXX+YYYY:ZZZZ
	  et remplacer la valeur par CC ( int 3 ).

	- r��crire le fichier ainsi modifi� sur le disque par WF,

	- quitter PERISCOPE et lancer GAME.EXE....
	.... le control est rendu � PERISCOPE d�s la premi�re instruction
	de GAME.EXE!

	On fait du TRACE jusqu'au premier CALL qu'on ignore superbement par
	3 NOP ( 909090 ) assembl�s ON-LINE et.... BINGO!

	Il ne reste plus qu'� faire la modif avec PCTOOLS,

		Dans la s�rie de sauts:	E82736
					E87F27
					E87E1D
					E87814

		Remplacer la premi�re s�rie par 909090.	  

	Ci dessous le listing comment� de PERISCOPE, la commande /E est �
	ignorer; elle permet juste de transferer tout ce qui apparait sur
	l'�cran de PERISCOPE sur un fichier disque.

	/E>n game.exe                        ; Donne le nom du fichier sur
					     ; lequel on va travailler.
                                   
	/E>lf                                ; Charge le fichier GAME.EXE
                                   
	/E>rds                               ; On ajuste DS � +10h.
                               
	DS 233F
	:ds+10
                                                                 
	/E>dw ds:8l1                         ; Dump de la taille du HEADER
	234F:0008  0020			     ; en paragraphes du programme.

	/E>dw ds:16l1			     ; Dump de CS.                                                              
	234F:0016  0000

	/E>dw ds:14l1                        ; Dump de IP.
	234F:0014  0100

	/E>e ds+0020+0000:0100               ; Recherche de la premi�re
					     ; adresse du programme.
	236F:0100  1E.CC		     ; On remplace par INT 3 CCh

	/E>wf           		     ; On r��crit le fichier sur le
					     ; disque pour l'executer.

	Un d�ssassemblage � partir de l'adresse calcul�e plus haut montre
	que l'on se trouve effectivement dans le programme. ( une fois 
	execut� ). A cet endroit on r��crit l'instruction d'origine ( 1E )
	pour faire du trace.

	( pour un programme COM la m�thode est beaucoup plus simple...

			> N XXX.COM
			> LF
			> E DS:100	).

	Listing;

	/E>u
	236F:0100 CC            INT     3	   ; d�but du programme...
	236F:0101 33C0          XOR     AX,AX
	236F:0103 50            PUSH    AX
	236F:0104 8CC8          MOV     AX,CS
	236F:0106 8ED8          MOV     DS,AX
	236F:0108 2E            CS:
	236F:0109 C6066D1D01    MOV     BYTE PTR [1D6D],01
	236F:010E 2E            CS:
	236F:010F C606BA0801    MOV     BYTE PTR [08BA],01
	236F:0114 90            NOP
	236F:0115 90            NOP
	236F:0116 90            NOP
	236F:0117 E87F27        CALL    2899	    ; s�ries de CALL...
	236F:011A E87E1D        CALL    1E9B			.
	236F:011D E87814        CALL    1598			.
	236F:0120 E87A2D        CALL    2E9D			.
	236F:0123 E82321        CALL    2249			.
	236F:0126 E83704        CALL    0560			.
	236F:0129 E87E23        CALL    24AA			.
	236F:012C E80C00        CALL    013B			.
	236F:012F E89A23        CALL    24CC			.
	236F:0132 E8902D        CALL    2EC5			.
	236F:0135 B80300        MOV     AX,0003		
	236F:0138 CD10          INT     10
	236F:013A CB            RETF		    ; fin du programme....